package com.pond.pond.mapper;

import com.pond.pond.domain.CommunityPost;
import com.pond.pond.domain.CommunityPostComment;
import com.pond.pond.domain.CommunityPostImage;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

import java.util.List;

/**
 * 社区帖子Mapper接口
 *
 * @author ruoyi
 * @date 2024-03-15
 */
public interface CommunityPostMapper {
    /**
     * 查询社区帖子列表
     *
     * @param communityPost 社区帖子
     * @param userId 当前用户ID
     * @return 社区帖子集合
     */
    List<CommunityPost> selectCommunityPostList(@Param("communityPost") CommunityPost communityPost, @Param("userId") Long userId);

    /**
     * 查询社区帖子详情
     *
     * @param id 社区帖子主键
     * @param userId 当前用户ID
     * @return 社区帖子
     */
    CommunityPost selectCommunityPostById(@Param("id") Long id, @Param("userId") Long userId);

    /**
     * 新增社区帖子
     *
     * @param communityPost 社区帖子
     * @return 结果
     */
    int insertCommunityPost(CommunityPost communityPost);

    /**
     * 修改社区帖子
     *
     * @param communityPost 社区帖子
     * @return 结果
     */
    int updateCommunityPost(CommunityPost communityPost);

    /**
     * 删除社区帖子
     *
     * @param id 社区帖子主键
     * @return 结果
     */
    int deleteCommunityPostById(Long id);

    /**
     * 批量删除社区帖子
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteCommunityPostByIds(Long[] ids);

    // ==================== 点赞相关 ====================
    
    /**
     * 检查用户是否已点赞
     */
    boolean checkUserLiked(@Param("postId") Long postId, @Param("userId") Long userId);

    /**
     * 插入点赞记录
     */
    int insertLike(@Param("postId") Long postId, @Param("userId") Long userId);

    /**
     * 删除点赞记录
     */
    int deleteLike(@Param("postId") Long postId, @Param("userId") Long userId);

    /**
     * 增加点赞数
     */
    int incrementLikeCount(@Param("postId") Long postId);

    /**
     * 减少点赞数
     */
    int decrementLikeCount(@Param("postId") Long postId);

    /**
     * 获取点赞数
     */
    int getLikeCount(@Param("postId") Long postId);

    // ==================== 收藏相关 ====================
    
    /**
     * 检查用户是否已收藏
     */
    boolean checkUserFavorited(@Param("postId") Long postId, @Param("userId") Long userId);

    /**
     * 插入收藏记录
     */
    int insertFavorite(@Param("postId") Long postId, @Param("userId") Long userId);

    /**
     * 删除收藏记录
     */
    int deleteFavorite(@Param("postId") Long postId, @Param("userId") Long userId);

    // ==================== 阅读量相关 ====================
    
    /**
     * 增加阅读量
     */
    int incrementReadCount(@Param("postId") Long postId);

    /**
     * 获取阅读量
     */
    int getReadCount(@Param("postId") Long postId);

    // ==================== 评论相关 ====================
    
    /**
     * 查询帖子评论列表
     */
    List<CommunityPostComment> selectCommentsByPostId(@Param("postId") Long postId, @Param("userId") Long userId);

    /**
     * 根据ID查询评论
     */
    CommunityPostComment selectCommentById(@Param("commentId") Long commentId);

    /**
     * 插入评论
     */
    int insertComment(CommunityPostComment comment);

    /**
     * 删除评论
     */
    int deleteComment(@Param("commentId") Long commentId);

    /**
     * 增加评论数
     */
    int incrementCommentCount(@Param("postId") Long postId);

    /**
     * 减少评论数
     */
    int decrementCommentCount(@Param("postId") Long postId);

    // ==================== 评论点赞相关 ====================
    
    /**
     * 检查用户是否已点赞评论
     */
    boolean checkCommentLiked(@Param("commentId") Long commentId, @Param("userId") Long userId);

    /**
     * 插入评论点赞记录
     */
    int insertCommentLike(@Param("commentId") Long commentId, @Param("userId") Long userId);

    /**
     * 删除评论点赞记录
     */
    int deleteCommentLike(@Param("commentId") Long commentId, @Param("userId") Long userId);

    /**
     * 增加评论点赞数
     */
    int incrementCommentLikeCount(@Param("commentId") Long commentId);

    /**
     * 减少评论点赞数
     */
    int decrementCommentLikeCount(@Param("commentId") Long commentId);

    /**
     * 获取评论点赞数
     */
    int getCommentLikeCount(@Param("commentId") Long commentId);

    // ==================== 热门推荐相关 ====================
    
    /**
     * 获取热门帖子
     */
    List<CommunityPost> selectHotPosts(@Param("limit") Integer limit, @Param("type") String type);

    /**
     * 获取用户收藏的帖子
     */
    List<CommunityPost> selectUserFavorites(@Param("userId") Long userId);

    /**
     * 获取用户发布的帖子
     */
    List<CommunityPost> selectUserPosts(@Param("userId") Long userId);

    // ==================== 图片相关 ====================
    
    /**
     * 插入帖子图片
     *
     * @param image 帖子图片
     * @return 结果
     */
    int insertCommunityPostImage(CommunityPostImage image);

    /**
     * 根据帖子ID删除所有图片
     *
     * @param postId 帖子ID
     * @return 结果
     */
    int deleteCommunityPostImagesByPostId(@Param("postId") Long postId);

    /**
     * 根据帖子ID查询图片列表
     *
     * @param postId 帖子ID
     * @return 图片列表
     */
    List<CommunityPostImage> selectImagesByPostId(@Param("postId") Long postId);

    /**
     * 获取用户评论列表（包含帖子标题）
     */
    List<Map<String, Object>> selectUserCommentsWithPostTitle(@Param("userId") Long userId);
}